package edu.harvard.econcs.turkserver.config; import java.io.File; import java.io.FileNotFoundException; import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.ConfigurationException; import com.amazonaws.mturk.util.ClientConfig; import com.google.inject.AbstractModule; import com.google.inject.Provides; import com.google.inject.Scopes; import com.google.inject.Singleton; import com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource; import edu.harvard.econcs.turkserver.mturk.RequesterServiceExt; import edu.harvard.econcs.turkserver.server.gui.TSTabbedPanel; public class DataModule extends AbstractModule { protected Configuration conf; public DataModule(String path) throws FileNotFoundException, ConfigurationException { File confFile = new File(ServerModule.class.getClassLoader().getResource(path).getFile()); if( !confFile.exists() ) throw new FileNotFoundException("configuration doesn't exist!"); conf = TSConfig.getCustom(confFile); System.out.println("Loaded custom config file " + confFile); } public DataModule(Configuration conf) { this.conf = conf; } public DataModule() { conf = TSConfig.getDefault(); } public Configuration getConfiguration() { return conf; } public void setAWSConfig(String accessKeyId, String secretAccessKey, boolean sandbox) { conf.addProperty(TSConfig.AWS_ACCESSKEYID, accessKeyId); conf.addProperty(TSConfig.AWS_SECRETACCESSKEY, secretAccessKey); conf.addProperty(TSConfig.AWS_SANDBOX, sandbox); } @Override protected void configure() { bind(Configuration.class).toInstance(conf); // See providers below for other bindings // GUI stuff bind(TSTabbedPanel.class).in(Scopes.SINGLETON); } @Provides @Singleton RequesterServiceExt getRequesterService() { // Create AWS Requester, if any RequesterServiceExt req = null; try { ClientConfig reqConf = TSConfig.getClientConfig(conf); req = new RequesterServiceExt(reqConf); } catch( RuntimeException e ) { e.printStackTrace(); System.out.println("Bad configuration for MTurk requester service. MTurk functions will be unavailable."); } return req; } @Provides @Singleton MysqlConnectionPoolDataSource getMysqlCPDS() { // Create a single MySQL connection pool return TSConfig.getMysqlCPDS(conf); } }